/*
 * Copyright 2010 UnitT Software Inc.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */
package com.unitt.commons.authorization.jpa;


import java.util.List;

import javax.persistence.Query;

import org.springframework.transaction.annotation.Transactional;

import com.unitt.commons.persist.CompositeKeyedDaoTemplate;


public class PermissionDao extends CompositeKeyedDaoTemplate<Permission, PermissionPk>
{
    public PermissionDao()
    {
        setDomainClass( Permission.class );
    }

    @SuppressWarnings( "unchecked" )
    public List<Permission> findByPermissable( Long aPermissableId, Long aPermissableTypeId )
    {
        Query query = getEntityManager().createNamedQuery( "findPermissionsByPermissable" );
        query.setParameter( "permissableId", aPermissableId );
        query.setParameter( "permissableTypeId", aPermissableTypeId );
        return query.getResultList();
    }

    public void deleteAll( Long aAssignableId, Long aAssignableTypeId )
    {
        Query query = getEntityManager().createNamedQuery( "deletePermissionsByAssignable" );
        query.setParameter( "assignableId", aAssignableId );
        query.setParameter( "assignableTypeId", aAssignableTypeId );
        query.executeUpdate();
    }

    @Transactional
    public void safeDeleteAll( Long aAssignableId, Long aAssignableTypeId )
    {
        deleteAll( aAssignableId, aAssignableTypeId );
    }
}
